package com.ruijie.acl.web;

import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.jsf.ListDataModel;

import com.ruijie.acl.utils.AclUtil;
import com.ruijie.foundation.bo.EntityObject;
import com.ruijie.foundation.web.action.BaseEntityAction2;

/**
 * <p>Title:ACL项目的Action基础类         </p>
 * <p>Description: ACL项目的Action基础类 </p>
 * <p>Copyright: Copyright (c) 2009     </p>
 * <p>Company: Ruijie Co., Ltd.       </p>
 * <p>Create Time: 2009-9-15           </p>
 * @author ASAI
 * <p>Update Time:                      </p>
 * <p>Updater:                          </p>
 * <p>Update Comments:                  </p>
 */
public abstract class AclBaseAction extends BaseEntityAction2 {

	// 调用页面
	private String previousPage;
	
	// 上级对象
	private EntityObject parentEntity;
	
	/**
	 * <p>Description:  根据上级对象，取得列表  </p>
     * <p>Create Time: 2009-09-18   </p>
	 * @param entity 上级对象
	 * @return
	 */
	public ListDataModel getEntityList(EntityObject parentEntity) {
		
		if (this.parentEntity == null ||  (this.parentEntity.getId() != null && parentEntity.getId() != null &&
				this.parentEntity.getId().longValue() != parentEntity.getId().longValue())){
			this.setEntityList(null);
			this.parentEntity = parentEntity;
		}
        return this.getEntityList();
    }
	
    /** 
     * <p>Description:  删除单个实体操作  </p>
     * <p>Create Time: 2009-09-18   </p>
 	 * @param entity 要删除的对象
     */
    @SuppressWarnings("unchecked")
    @Transactional
    public void delete(EntityObject entity) {
    	this.getRepository().remove(entity);
    	this.doSingleDelete(entity);
    	updateModel();
        // 如果当前页面已经没有记录(例如删除了当前页面的所有记录)，那么显示上一页
        if (currentPage.getTotalPageCount() < page && page > 1) {
            page--;
            updateModel();
        }
        addGlobalI18nMessage(getDelSingleSuccessMsg());
    }
    /**
     * 删除单个对象时的动作
     * @param entity
     */
	public void doSingleDelete(EntityObject entity){
		//
	}

    
	/** 
     * <p>Description:  跳转到添加页面  </p>
     * <p>Create Time: 2009-09-17   </p>
     * @param previousPage 调用的页面
     * @return 添加页面地址
     */
    public String toAddPage(String previousPage) {
    	this.previousPage = previousPage;
    	return super.toAddPage();
    }
    
    /** 
     * <p>Description:   跳转到更新页面  </p>
     * <p>Create Time: 2009-09-17   </p>
     * @param model 修改的对象
     * @param previousPage 调用的页面
     * @return 更新页面地址
     */
    public String toUpdatePage(EntityObject model,String previousPage) {
    	this.previousPage = previousPage;
    	return super.toUpdatePage(model);
    }
    
    /** 
     * <p>Description:   跳转到更新页面  </p>
     * <p>Create Time: 2009-09-17   </p>
     * @param previousPage 调用的页面
     * @return 更新页面地址
     */
    public String toUpdatePage(String previousPage){
    	this.previousPage = previousPage;
    	return super.toUpdatePage();
    }
    /** 
     * <p>Description:  跳转到详细信息页面 </p>
     * <p>Create Time: 2009-09-17   </p>
     * @param model 显示的对象
     * @param previousPage 调用的页面
     * @return 详细页面地址
     */
    public String toDetailPage(EntityObject model,String previousPage) {
    	this.previousPage = previousPage;
    	return super.toDetailPage(model);
    }
	   
	/**
	 * <p>Title: 返回到调用的页面</p>
	 * <p>Description: 如果没有设置调用页面，则直接返回Action的列表页面。</p>
	 * @param clearFlag 是否要清空值
	 */
	public void returnPreviousPage(boolean clearFlag){
		if (clearFlag){
			this.clearUnSaveModel();
		}
		if (AclUtil.empty(this.previousPage)){
			redirectTo(this.getListPage());
		}else{
			redirectTo(previousPage);  
		}
    }

	/**
	 * <p>Title: 返回到调用的页面</p>
	 * <p>Description: 如果没有设置调用页面，则直接返回Action的列表页面。</p>
	 * <p>不会重新取得值</p>
	 */
	public void returnPreviousPage(){
		returnPreviousPage(false);
    }
	
	public String getPreviousPage() {
		return previousPage;
	}

	public void setPreviousPage(String previousPage) {
		this.previousPage = previousPage;
	}

	public EntityObject getParentEntity() {
		return parentEntity;
	}

	public void setParentEntity(EntityObject parentEntity) {
		this.parentEntity = parentEntity;
	}
	/**
	 * 调整当前页数,非法时为第一页
	 */
	public void adjustPage(){
		try{
			if (page < 1 || page > this.getPagesCount()){
				page = 1;
			}
		}catch(Exception ex){
			page = 1;
		}
	}
	
	public ListDataModel getEntityList() {
		adjustPage();
		return super.getEntityList();
	}
}
